home *** CD-ROM | disk | FTP | other *** search
/ ftp.mactech.com 2010 / ftp.mactech.com.tar / ftp.mactech.com / thinkref / archive / THINKPascalUH2.1.sea / THINKPas Univ Hdr 2.1 / Interfaces / Power.p < prev    next >
Text File  |  1995-09-12  |  12KB  |  394 lines

  1. { Converted with MPW2TPas Tuesday, September 12, 1995 8:50:25 PM }
  2. {
  3.      File:        Power.p
  4.  
  5.      Contains:    Power Manager Interfaces.
  6.  
  7.      Version:    Technology:    System 7.5
  8.                  Package:    Universal Interfaces 2.1 in “MPW Latest” on ETO #18
  9.  
  10.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  11.                  All rights reserved.
  12.  
  13.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  14.                  stack.  Include the file and version information (from above)
  15.                  in the problem description and send to:
  16.                      Internet:    apple.bugs@applelink.apple.com
  17.                      AppleLink:    APPLE.BUGS
  18.  
  19. }
  20.  
  21.  UNIT Power;
  22.  INTERFACE
  23.  
  24.  
  25. {$IFC UNDEFINED __POWER__}
  26. {$SETC __POWER__ := 1}
  27.  
  28.   USES
  29.    ConditionalMacros, Types, MixedMode;
  30.  
  31. { $PUSH}
  32. { $ALIGN MAC68K}
  33. { $LibExport+}
  34.  
  35. CONST
  36. { Bit positions for ModemByte }
  37.     modemOnBit                    = 0;
  38.     ringWakeUpBit                = 2;
  39.     modemInstalledBit            = 3;
  40.     ringDetectBit                = 4;
  41.     modemOnHookBit                = 5;
  42. { masks for ModemByte }
  43.     modemOnMask                    = $01;
  44.     ringWakeUpMask                = $04;
  45.     modemInstalledMask            = $08;
  46.     ringDetectMask                = $10;
  47.     modemOnHookMask                = $20;
  48. { bit positions for BatteryByte }
  49.     chargerConnBit                = 0;
  50.     hiChargeBit                    = 1;
  51.     chargeOverFlowBit            = 2;
  52.     batteryDeadBit                = 3;
  53.     batteryLowBit                = 4;
  54.     connChangedBit                = 5;
  55. { masks for BatteryByte }
  56.     chargerConnMask                = $01;
  57.     hiChargeMask                = $02;
  58.     chargeOverFlowMask            = $04;
  59.     batteryDeadMask                = $08;
  60.     batteryLowMask                = $10;
  61.     connChangedMask                = $20;
  62.  
  63. { commands to SleepQRec sleepQProc }
  64.     sleepRequest                = 1;
  65.     sleepDemand                    = 2;
  66.     sleepWakeUp                    = 3;
  67.     sleepRevoke                    = 4;
  68.     sleepUnlock                    = 4;
  69.     sleepDeny                    = 5;
  70.     sleepNow                    = 6;
  71.     dozeDemand                    = 7;
  72.     dozeWakeUp                    = 8;
  73.     dozeRequest                    = 9;
  74. { SleepQRec.sleepQFlags }
  75.     noCalls                        = 1;
  76.     noRequest                    = 2;
  77.     slpQType                    = 16;
  78.     sleepQType                    = 16;
  79.  
  80. { bits in bitfield returned by PMFeatures }
  81.     hasWakeupTimer                = 0;                            { 1=wakeup timer is supported                        }
  82.     hasSharedModemPort            = 1;                            { 1=modem port shared by SCC and internal modem    }
  83.     hasProcessorCycling            = 2;                            { 1=processor cycling is supported                    }
  84.     mustProcessorCycle            = 3;                            { 1=processor cycling should not be turned off        }
  85.     hasReducedSpeed                = 4;                            { 1=processor can be started up at reduced speed    }
  86.     dynamicSpeedChange            = 5;                            { 1=processor speed can be switched dynamically    }
  87.     hasSCSIDiskMode                = 6;                            { 1=SCSI Disk Mode is supported                    }
  88.     canGetBatteryTime            = 7;                            { 1=battery time can be calculated                    }
  89.     canWakeupOnRing                = 8;                            { 1=can wakeup when the modem detects a ring        }
  90.     hasDimmingSupport            = 9;                            { 1=has dimming support built in                    }
  91.     hasStartupTimer                = 10;                            { 1=startup timer is supported                        }
  92.  
  93. { bits in bitfield returned by GetIntModemInfo and set by SetIntModemState }
  94.     hasInternalModem            = 0;                            { 1=internal modem installed                        }
  95.     intModemRingDetect            = 1;                            { 1=internal modem has detected a ring                }
  96.     intModemOffHook                = 2;                            { 1=internal modem is off hook                        }
  97.     intModemRingWakeEnb            = 3;                            { 1=wakeup on ring is enabled                        }
  98.     extModemSelected            = 4;                            { 1=external modem selected                        }
  99.     modemSetBit                    = 15;                            { 1=set bit, 0=clear bit (SetIntModemState)        }
  100.  
  101. { bits in BatteryInfo.flags                                     }
  102. { ("chargerConnected" doesn't mean the charger is plugged in)    }
  103.     batteryInstalled            = 7;                            { 1=battery is currently connected                    }
  104.     batteryCharging                = 6;                            { 1=battery is being charged                        }
  105.     chargerConnected            = 5;                            { 1=charger is connected to the PowerBook            }
  106.  
  107.     HDPwrQType                    = 'HD';                            { hard disk spindown queue element type            }
  108.     PMgrStateQType                = 'PM';
  109.  
  110.  
  111. TYPE
  112.     BatteryInfo = PACKED RECORD
  113.         flags:                    UInt8;                                    { misc flags (see below)                            }
  114.         warningLevel:            UInt8;                                    { scaled warning level (0-255)                        }
  115.         reserved:                UInt8;                                    { reserved for internal use                        }
  116.         batteryLevel:            UInt8;                                    { scaled battery level (0-255)                        }
  117.     END;
  118.  
  119.     ModemByte = SInt8;
  120.  
  121.     BatteryByte = SInt8;
  122.  
  123.     PMResultCode = LONGINT;
  124.  
  125.     SleepQRecPtr = ^SleepQRec;
  126.  
  127.     {
  128.         SleepQProcPtr uses register based parameters on the 68k and cannot
  129.         be written in or called from a high-level language without the help of
  130.         mixed mode or assembly glue.
  131.  
  132.         In:
  133.          => message         D0.L
  134.          => qRecPtr         A0.L
  135.         Out:
  136.          <= return value    D0.L
  137.     }
  138.     SleepQProcPtr = Register68kProcPtr;  { register FUNCTION SleepQ(message: LONGINT; qRecPtr: SleepQRecPtr): LONGINT; }
  139.     HDSpindownProcPtr = ProcPtr;  { PROCEDURE HDSpindown(VAR theElement: HDQueueElement); }
  140.     SleepQUPP = UniversalProcPtr;
  141.     HDSpindownUPP = UniversalProcPtr;
  142.  
  143.     SleepQRec = RECORD
  144.         sleepQLink:                ^SleepQRec;                                { pointer to next queue element                }
  145.         sleepQType:                INTEGER;                                { queue element type (must be SleepQType)        }
  146.         sleepQProc:                SleepQUPP;                                { pointer to sleep universal proc ptr            }
  147.         sleepQFlags:            INTEGER;                                { flags                                        }
  148.     END;
  149.  
  150.     HDQueueElement = RECORD
  151.         hdQLink:                ^HDQueueElement;                        { pointer to next queue element                }
  152.         hdQType:                INTEGER;                                { queue element type (must be HDPwrQType)        }
  153.         hdFlags:                INTEGER;                                { miscellaneous flags                            }
  154.         hdProc:                    HDSpindownUPP;                            { pointer to routine to call                    }
  155.         hdUser:                    LONGINT;                                { user-defined (variable storage, etc.)        }
  156.     END;
  157.  
  158.     BatteryTimeRec = RECORD
  159.         expectedBatteryTime:    LONGINT;                                { estimated battery time remaining (seconds)    }
  160.         minimumBatteryTime:        LONGINT;                                { minimum battery time remaining (seconds)        }
  161.         maximumBatteryTime:        LONGINT;                                { maximum battery time remaining (seconds)        }
  162.         timeUntilCharged:        LONGINT;                                { time until battery is fully charged (seconds)}
  163.     END;
  164.  
  165.     WakeupTime = RECORD
  166.         wakeTime:                LONGINT;                                { wakeup time (same format as current time)        }
  167.         wakeEnabled:            BOOLEAN;                                { 1=enable wakeup timer, 0=disable wakeup timer    }
  168.     END;
  169.  
  170.     StartupTime = RECORD
  171.         startTime:                LONGINT;                                { startup time (same format as current time)        }
  172.         startEnabled:            BOOLEAN;                                { 1=enable startup timer, 0=disable startup timer    }
  173.     END;
  174.  
  175.  
  176. FUNCTION DisableWUTime: OSErr;
  177. FUNCTION SetWUTime(WUTime: LONGINT): OSErr;
  178. FUNCTION GetWUTime(VAR WUTime: LONGINT; VAR WUFlag: SignedByte): OSErr;
  179. FUNCTION BatteryStatus(VAR Status: SignedByte; VAR Power: SignedByte): OSErr;
  180. FUNCTION ModemStatus(VAR Status: SignedByte): OSErr;
  181. FUNCTION IdleUpdate: LONGINT;
  182.     {$IFC NOT GENERATINGCFM}
  183.     INLINE $A285, $2E80;
  184.     {$ENDC}
  185. FUNCTION GetCPUSpeed: LONGINT;
  186.     {$IFC NOT GENERATINGCFM}
  187.     INLINE $70FF, $A485, $2E80;
  188.     {$ENDC}
  189. PROCEDURE EnableIdle;
  190.     {$IFC NOT GENERATINGCFM}
  191.     INLINE $7000, $A485;
  192.     {$ENDC}
  193. PROCEDURE DisableIdle;
  194.     {$IFC NOT GENERATINGCFM}
  195.     INLINE $7001, $A485;
  196.     {$ENDC}
  197. PROCEDURE SleepQInstall(qRecPtr: SleepQRecPtr);
  198.     {$IFC NOT GENERATINGCFM}
  199.     INLINE $205F, $A28A;
  200.     {$ENDC}
  201. PROCEDURE SleepQRemove(qRecPtr: SleepQRecPtr);
  202.     {$IFC NOT GENERATINGCFM}
  203.     INLINE $205F, $A48A;
  204.     {$ENDC}
  205. PROCEDURE AOn;
  206.     {$IFC NOT GENERATINGCFM}
  207.     INLINE $7004, $A685;
  208.     {$ENDC}
  209. PROCEDURE AOnIgnoreModem;
  210.     {$IFC NOT GENERATINGCFM}
  211.     INLINE $7005, $A685;
  212.     {$ENDC}
  213. PROCEDURE BOn;
  214.     {$IFC NOT GENERATINGCFM}
  215.     INLINE $7000, $A685;
  216.     {$ENDC}
  217. PROCEDURE AOff;
  218.     {$IFC NOT GENERATINGCFM}
  219.     INLINE $7084, $A685;
  220.     {$ENDC}
  221. PROCEDURE BOff;
  222.     {$IFC NOT GENERATINGCFM}
  223.     INLINE $7080, $A685;
  224.     {$ENDC}
  225. { Public Power Management API (NEW!) }
  226. FUNCTION PMSelectorCount: INTEGER;
  227.     {$IFC NOT GENERATINGCFM}
  228.     INLINE $7000, $A09E, $3E80;
  229.     {$ENDC}
  230. FUNCTION PMFeatures: LONGINT;
  231.     {$IFC NOT GENERATINGCFM}
  232.     INLINE $7001, $A09E, $2E80;
  233.     {$ENDC}
  234. FUNCTION GetSleepTimeout: UInt8;
  235.     {$IFC NOT GENERATINGCFM}
  236.     INLINE $7002, $A09E, $1E80;
  237.     {$ENDC}
  238. PROCEDURE SetSleepTimeout(timeout: ByteParameter);
  239.     {$IFC NOT GENERATINGCFM}
  240.     INLINE $101F, $4840, $303C, $0003, $A09E;
  241.     {$ENDC}
  242. FUNCTION GetHardDiskTimeout: UInt8;
  243.     {$IFC NOT GENERATINGCFM}
  244.     INLINE $7004, $A09E, $1E80;
  245.     {$ENDC}
  246. PROCEDURE SetHardDiskTimeout(timeout: ByteParameter);
  247.     {$IFC NOT GENERATINGCFM}
  248.     INLINE $101F, $4840, $303C, $0005, $A09E;
  249.     {$ENDC}
  250. FUNCTION HardDiskPowered: BOOLEAN;
  251.     {$IFC NOT GENERATINGCFM}
  252.     INLINE $7006, $A09E, $1E80;
  253.     {$ENDC}
  254. PROCEDURE SpinDownHardDisk;
  255.     {$IFC NOT GENERATINGCFM}
  256.     INLINE $7007, $A09E;
  257.     {$ENDC}
  258. FUNCTION IsSpindownDisabled: BOOLEAN;
  259.     {$IFC NOT GENERATINGCFM}
  260.     INLINE $7008, $A09E, $1E80;
  261.     {$ENDC}
  262. PROCEDURE SetSpindownDisable(setDisable: BOOLEAN);
  263.     {$IFC NOT GENERATINGCFM}
  264.     INLINE $101F, $4840, $303C, $0009, $A09E;
  265.     {$ENDC}
  266. FUNCTION HardDiskQInstall(VAR theElement: HDQueueElement): OSErr;
  267.     {$IFC NOT GENERATINGCFM}
  268.     INLINE $205F, $700A, $A09E, $3E80;
  269.     {$ENDC}
  270. FUNCTION HardDiskQRemove(VAR theElement: HDQueueElement): OSErr;
  271.     {$IFC NOT GENERATINGCFM}
  272.     INLINE $205F, $700B, $A09E, $3E80;
  273.     {$ENDC}
  274. PROCEDURE GetScaledBatteryInfo(whichBattery: INTEGER; VAR theInfo: BatteryInfo);
  275.     {$IFC NOT GENERATINGCFM}
  276.     INLINE $205F, $301F, $4840, $303C, $000C, $A09E, $2080;
  277.     {$ENDC}
  278. PROCEDURE AutoSleepControl(enableSleep: BOOLEAN);
  279.     {$IFC NOT GENERATINGCFM}
  280.     INLINE $101F, $4840, $303C, $000D, $A09E;
  281.     {$ENDC}
  282. FUNCTION GetIntModemInfo: LONGINT;
  283.     {$IFC NOT GENERATINGCFM}
  284.     INLINE $700E, $A09E, $2E80;
  285.     {$ENDC}
  286. PROCEDURE SetIntModemState(theState: INTEGER);
  287.     {$IFC NOT GENERATINGCFM}
  288.     INLINE $301F, $4840, $303C, $000F, $A09E;
  289.     {$ENDC}
  290. FUNCTION MaximumProcessorSpeed: INTEGER;
  291.     {$IFC NOT GENERATINGCFM}
  292.     INLINE $7010, $A09E, $3E80;
  293.     {$ENDC}
  294. FUNCTION CurrentProcessorSpeed: INTEGER;
  295.     {$IFC NOT GENERATINGCFM}
  296.     INLINE $7011, $A09E, $3E80;
  297.     {$ENDC}
  298. FUNCTION FullProcessorSpeed: BOOLEAN;
  299.     {$IFC NOT GENERATINGCFM}
  300.     INLINE $7012, $A09E, $1E80;
  301.     {$ENDC}
  302. FUNCTION SetProcessorSpeed(fullSpeed: BOOLEAN): BOOLEAN;
  303.     {$IFC NOT GENERATINGCFM}
  304.     INLINE $101F, $4840, $303C, $0013, $A09E, $1E80;
  305.     {$ENDC}
  306. FUNCTION GetSCSIDiskModeAddress: INTEGER;
  307.     {$IFC NOT GENERATINGCFM}
  308.     INLINE $7014, $A09E, $3E80;
  309.     {$ENDC}
  310. PROCEDURE SetSCSIDiskModeAddress(scsiAddress: INTEGER);
  311.     {$IFC NOT GENERATINGCFM}
  312.     INLINE $301F, $4840, $303C, $0015, $A09E;
  313.     {$ENDC}
  314. PROCEDURE GetWakeupTimer(VAR theTime: WakeupTime);
  315.     {$IFC NOT GENERATINGCFM}
  316.     INLINE $205F, $7016, $A09E;
  317.     {$ENDC}
  318. PROCEDURE SetWakeupTimer(VAR theTime: WakeupTime);
  319.     {$IFC NOT GENERATINGCFM}
  320.     INLINE $205F, $7017, $A09E;
  321.     {$ENDC}
  322. FUNCTION IsProcessorCyclingEnabled: BOOLEAN;
  323.     {$IFC NOT GENERATINGCFM}
  324.     INLINE $7018, $A09E, $1E80;
  325.     {$ENDC}
  326. PROCEDURE EnableProcessorCycling(enable: BOOLEAN);
  327.     {$IFC NOT GENERATINGCFM}
  328.     INLINE $101F, $4840, $303C, $0019, $A09E;
  329.     {$ENDC}
  330. FUNCTION BatteryCount: INTEGER;
  331.     {$IFC NOT GENERATINGCFM}
  332.     INLINE $701A, $A09E, $3E80;
  333.     {$ENDC}
  334. FUNCTION GetBatteryVoltage(whichBattery: INTEGER): Fixed;
  335.     {$IFC NOT GENERATINGCFM}
  336.     INLINE $301F, $4840, $303C, $001B, $A09E, $2E80;
  337.     {$ENDC}
  338. PROCEDURE GetBatteryTimes(whichBattery: INTEGER; VAR theTimes: BatteryTimeRec);
  339.     {$IFC NOT GENERATINGCFM}
  340.     INLINE $205F, $301F, $4840, $303C, $001C, $A09E;
  341.     {$ENDC}
  342. FUNCTION GetDimmingTimeout: UInt8;
  343.     {$IFC NOT GENERATINGCFM}
  344.     INLINE $701D, $A09E, $1E80;
  345.     {$ENDC}
  346. PROCEDURE SetDimmingTimeout(timeout: ByteParameter);
  347.     {$IFC NOT GENERATINGCFM}
  348.     INLINE $101F, $4840, $303C, $001E, $A09E;
  349.     {$ENDC}
  350. PROCEDURE DimmingControl(enableSleep: BOOLEAN);
  351.     {$IFC NOT GENERATINGCFM}
  352.     INLINE $101F, $4840, $303C, $001F, $A09E;
  353.     {$ENDC}
  354. FUNCTION IsDimmingControlDisabled: BOOLEAN;
  355.     {$IFC NOT GENERATINGCFM}
  356.     INLINE $7020, $A09E, $1E80;
  357.     {$ENDC}
  358. FUNCTION IsAutoSlpControlDisabled: BOOLEAN;
  359.     {$IFC NOT GENERATINGCFM}
  360.     INLINE $7021, $A09E, $1E80;
  361.     {$ENDC}
  362. CONST
  363.     uppSleepQProcInfo = $00131832; { Register FUNCTION (4 bytes in D0, 4 bytes in A0): 4 bytes in D0; }
  364.     uppHDSpindownProcInfo = $000000C0; { PROCEDURE (4 byte param); }
  365.  
  366. FUNCTION NewSleepQProc(userRoutine: SleepQProcPtr): SleepQUPP;
  367.     {$IFC NOT GENERATINGCFM }
  368.     INLINE $2E9F;
  369.     {$ENDC}
  370.  
  371. FUNCTION NewHDSpindownProc(userRoutine: HDSpindownProcPtr): HDSpindownUPP;
  372.     {$IFC NOT GENERATINGCFM }
  373.     INLINE $2E9F;
  374.     {$ENDC}
  375.  
  376. FUNCTION CallSleepQProc(message: LONGINT; qRecPtr: SleepQRecPtr; userRoutine: SleepQUPP): LONGINT;
  377.     {$IFC NOT GENERATINGCFM}
  378.     {To be implemented:  Glue to move parameters into registers.}
  379.     {$ENDC}
  380.  
  381. PROCEDURE CallHDSpindownProc(VAR theElement: HDQueueElement; userRoutine: HDSpindownUPP);
  382.     {$IFC NOT GENERATINGCFM}
  383.     INLINE $205F, $4E90;
  384.     {$ENDC}
  385.  
  386. { $ALIGN RESET}
  387. { $POP}
  388.  
  389. {$ENDC} {__POWER__}
  390.  
  391.  IMPLEMENTATION
  392.  END.
  393.  
  394.